package com.heima.article.feign;

import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.heima.apis.article.IArticleClient;
import com.heima.article.service.ApArticleConfigService;
import com.heima.article.service.ApArticleService;
import com.heima.model.article.dtos.ArticleCommentDto;
import com.heima.model.article.dtos.ArticleDto;
import com.heima.model.article.pojos.ApArticleConfig;
import com.heima.model.comment.dtos.CommentConfigDto;
import com.heima.model.common.dtos.PageResponseResult;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.wemedia.dtos.StatisticsDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Date;

//相当于把下面的controller接口注册到leadnews-feign-api里面，以提供给其它微服务调用
//其它微服务调用leadnews-feign-api里的服务的方法：
// 1.在其启动类里添加 @EnableFeignClients("com.heima.apis")
// 2.在Impl类里@Autowired IArticleClient articleClient;
// 3.调用articleClient.saveArticle(xxx);

@Slf4j
@RestController             //实现
public class ArticleClient implements IArticleClient {
//IArticleClient定义在leadnews-feign-api中

    @Autowired
    private ApArticleService apArticleService;

    /**
     * 保存app端相关文章 涉及到三张表 ap_article ap_article_config ap_article_content
     * @param dto
     * @return
     */
    @PostMapping("/api/v1/article/save")
    @Override
    public ResponseResult saveArticle(@RequestBody ArticleDto dto) {
        log.info("调用到了远程方法saveArticle，参数：{}",dto);
        return apArticleService.saveArticle(dto);
    }

    /**
     * 图文统计查询时间范围内文章的点赞和收藏数据
     * @return
     */
    @GetMapping("/api/v1/article/queryLikesAndConllections")
    @Override
    public ResponseResult queryLikesAndConllections(@RequestParam("wmUserId") Integer wmUserId,
                                                    @RequestParam("beginDate") Date beginDate,
                                                    @RequestParam("endDate") Date endDate) {
        log.info("调用到了远程方法queryLikesAndConllections，参数：{},{},{}",wmUserId,beginDate,endDate);
        return apArticleService.queryLikesAndConllections(wmUserId,beginDate,endDate);
    }

    /**
     * 查询文章的实时数据??
     * @return
     */
    @PostMapping("/api/v1/article/newPage")
    @Override
    public PageResponseResult newPage(@RequestBody StatisticsDto dto) {
        log.info("调用到了远程方法newPage，参数：{}",dto);
        return apArticleService.newPage(dto);
    }

    @Autowired
    private ApArticleConfigService apArticleConfigService;

    /**
     * 查询文章的配置信息
     * @param articleId
     * @return
     */
    @GetMapping("/api/v1/article/findArticleConfigByArticleId/{articleId}")
    @Override
    public ResponseResult findArticleConfigByArticleId(@PathVariable("articleId") Long articleId) {
        log.info("调用到了远程方法findArticleConfigByArticleId，参数：{}",articleId);
        ApArticleConfig apArticleConfig = apArticleConfigService
                .getOne(Wrappers.<ApArticleConfig>lambdaQuery().eq(ApArticleConfig::getArticleId, articleId));
        return ResponseResult.okResult(apArticleConfig);
    }

    /**
     * 查询文章评论的状态(评论管理分页查询，展示文章标题，评论状态，评论总量。。)
     * @return
     */
    @PostMapping("/api/v1/article/findNewsComments")
    @Override
    public PageResponseResult findNewsComments(@RequestBody ArticleCommentDto dto) {
        log.info("调用到了远程方法findNewsComments查询文章评论的状态");
        return apArticleService.findNewsComments(dto);
    }

    /**
     * (关闭评论后)修改文章的评论状态
     * @return
     */
    @PostMapping("/api/v1/article/updateCommentStatus")
    @Override
    public ResponseResult updateCommentStatus(@RequestBody CommentConfigDto dto) {
        log.info("调用到了远程方法updateCommentStatus，参数：{}",dto);
        return apArticleConfigService.updateCommentStatus(dto);
    }
}
//
//                     |-------------------|
//                     |   heima-leadnews  |
//                     |-------------------|
//                               ^
//                               |继承
//                               |
//               |------------------------------|
//               |   heima-leadnews-feign-apis  | 定义feign接口
//               |------------------------------|
//                 ^                      ^
//                 |依赖                   |实现
//  |------------------------------|   |----------------------------|
//  |   heima-leadnews-wemedia     |   |  heima-leadnews-article    |
//  |------------------------------|   |----------------------------|
